package com.shujia

object Demo15Match {
  def main(args: Array[String]): Unit = {
    /**
     * 模式匹配 相当于switch
     * java中可以匹配：基本数据类型、字符串、枚举
     * scala中可以匹配：基本数据类型、字符串、枚举、类型、样例类对象
     */

    // 1、匹配基本数据类型
    val i: Int = 10

    i match {
      case 1 => println("i是1")
      case 10 => println("i是10")
      case _ => println("其他情况")
    }

    // 2、匹配字符串
    val str: String = "efg"
    str match {
      case "abc" => {
        println(str.reverse)
      }
      case "efg" => {
        println(str)
      }
      case _ => {
        println("其他情况不做任何处理")
      }
    }

    // 3、匹配类型
    val j: Any = "100"
    j match {
      case t1: Int => println("j是Int类型，j的值为" + t1)
      case t1: String => println("j是String类型，j的值为" + t1)
      case _ => println("j是其他类型")
    }

    val map: Map[String, String] = Map("k1" -> "v1", "k2" -> "v2", "k3" -> "v3")

    val default: String = "key不存在即返回默认值"
    val op: Option[String] = map.get("kk1")

    // 模式匹配在Map中的应用
    // 模式匹配可以有返回值
    val value: String = op match {
      case Some(v) => {
        println("key是存在的，对应的value值为 " + v)
        v
      }
      case None => {
        println("key不存在，返回了None，使用时要小心")
        default
      }
    }

    println(value)

    case class Stu(id: String, name: String)

    val stu: Stu = Stu("001", "张三")

    stu match {
      case Stu("001", "张三") => {
        println("匹配到了学生张三")
      }
      case Stu("002", "李四") => {
        println("匹配到了学生李四")
      }
      case _ => {
        println("其他学生")
      }
    }
  }
}



